package com.sundaying.gooway.interceptor;

import java.lang.reflect.Method;
import java.util.Date;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.sundaying.gooway.model.User;

/*
 * 用于拦截请求判断是否拥有权限的拦截器
 */
public class AuthorityInterceptor implements Interceptor {

	@Override
	public void destroy() {
		System.out.println("销毁拦截器AuthorityInterceptor");
	}

	@Override
	public void init() {
		System.out.println("初始化拦截器AuthorityInterceptor");
	}

	@Override
	public String intercept(ActionInvocation actionInvocation) throws Exception {
		String methodName = actionInvocation.getProxy().getMethod();
		Method currentMethod = actionInvocation.getAction().getClass()
				.getMethod(methodName, null);
		System.out.println("methodName: " + methodName + "|" + currentMethod);
		if (methodName.equals("login"))
			return actionInvocation.invoke();

		// 1、判断客户是否登陆
		ActionContext ctx = actionInvocation.getInvocationContext();
		// 取出名为user的session属性
		User user = (User) ctx.getSession().get("user");
		// 如果没有登陆返回重新登陆
//		if (user == null) {
//			ctx.put("tip", "您还没有登录，请登陆系统");
//			return Action.INPUT;
//		}

		// 2、进行权限控制判断

		// 如果该请求方法是需要进行验证的则需执行以下逻辑
//		if (currentMethod.isAnnotationPresent(Authority.class)) {
//			// 获取权限校验的注解
//			Authority authority = currentMethod.getAnnotation(Authority.class);
//			// 获取当前请求的注解的actionName
//			String actionName = authority.actionName();
//			// 获取当前请求需要的权限
//			String privilege = authority.privilege();
//
//			// 可以在此判断当前客户是否拥有对应的权限，如果没有可以跳到指定的无权限提示页面，如果拥有则可以继续往下执行。
//
//			if (privilege.equals("list")) {
//				System.out.println("客户" + user.getUserName() + "在" + new Date()
//						+ "执行了" + actionName + "方法，拥有" + privilege + "权限！！");
//				return actionInvocation.invoke();
//			} else {
//				System.out.println("客户" + user.getUserName() + "在" + new Date()
//						+ "执行了" + actionName + "方法，没有" + privilege + "权限！！");
//				// return "success";
//				return actionInvocation.invoke();
//			}
//		}

		// 3、进行非权限控制判断
		System.out.println("您还没有权限执行！暂时不控制权限...");
		return actionInvocation.invoke();
		
	}

}
